package net.zjitc.controller;

import javafx.beans.binding.FloatExpression;
import net.zjitc.domain.*;
import net.zjitc.service.CartService;
import net.zjitc.service.Impl.CartServiceImpl;
import net.zjitc.service.Impl.OrdersServiceImpl;
import net.zjitc.service.Impl.ServiceImpl;
import net.zjitc.service.OrdersService;
import net.zjitc.service.Service;
import net.zjitc.utils.UUIDUtils;
import org.apache.commons.beanutils.BeanUtils;
import utils.dispacher.URLMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.sql.SQLException;
import java.util.*;

/**
 * Created by Administrator on 2017/12/13.
 */
public class UserOrder {
    OrdersService orderService = new OrdersServiceImpl();
    CartService cartService = new CartServiceImpl();
    Service ser=new ServiceImpl();

    @URLMapping(url = "/MyOrder")
    public String creatOrder(HttpServletRequest request, HttpServletResponse response) {
        /**
         * 1.从session user
         * 2.生成一个订单对象 order(id UUID,时间，未付款，收货人信息（默认收货信息，是当前用户），用户)
         * 3.订单根据购物车生成的（从数据库中查出购物车的信息cartlist）
         * 4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）,
         * 5.订单条目是个集合，要把它放在订单下面
         * 6.把order订单插入数据库（事务）
         * 7.购物车清空
         * 8.order放到request域中，转发到订单页面
         */
        //1.从session user
        List<Category> clist = ser.findAllCategory();
        request.setAttribute("clist",clist);
        User user = (User) request.getSession().getAttribute("user");
        if (user == null) {
            return "/WEB-INF/user/login.jsp";
        }
        //2. 生成一个订单对象 order(id UUID,时间，未付款，收货人信息（默认收货信息，是当前用户），用户)

        Order order = new Order();
        order.setOid(UUIDUtils.getUUID());
        //默认收货信息为登录用户信息
        order.setAddr(user.getAddr());
        order.setPhone(user.getPhone());
        order.setName(user.getName());

        order.setState(0); //0  未付款  1  付款，但未发货 2. 发货，但未收货  3  收货 交易完成
        order.setUser(user);
        //下单时间 ？？下单时间 字符串  //写个方法 ，方法功能：日期转成字符串
        order.setOrdertime(UUIDUtils.dateToString(new Date()));

        //3.订单根据购物车生成的（从数据库中查出购物车的信息cartlist）
        List<CartItem> _cartItemList = cartService.findByUid(user.getUid());
        //购物车为空时不生成
        if (_cartItemList == null) {
            request.setAttribute("购物车为空","msg");
            return "/WEB-INF/user/msg.jsp";
        }
        //4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）,
        List<OrderItem> orderitemList = new ArrayList<OrderItem>();//此集合用于存入订单条目
        double total = 0.0;
        for (CartItem item : _cartItemList) {
            OrderItem orderitem = new OrderItem();
            orderitem.setOrder(order);
            orderitem.setProduct(item.getProduct());
            orderitem.setOstate(0); //评价状态
            orderitem.setCount(item.getQuantity());//设置数量
            orderitem.setSubtotal(item.getProduct().getShop_price() * item.getQuantity());
            total = total + item.getProduct().getShop_price() * item.getQuantity();//计算总价
            orderitemList.add(orderitem);
        }

        //5. 订单条目是个集合，要把它放在订单下面
        order.setOrderItemList(orderitemList);
        order.setTotal(total);

        //把order订单插入数据库（事务service）
        int count = orderService.add(order);  //订单生成 ok    error
        //* 7.此用户下的购物车清空
        //cartService.deleteByUid(user.getUid()); //删除 error   ok
        //   * 8.order放到request域中，转发到订单页面
        cartService.clear();
        request.setAttribute("order", order);

        return "/WEB-INF/user/order.jsp";
    }


    @URLMapping(url = "/showOrder")
    public String showOrder(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        {
            List<Category> clist = ser.findAllCategory();
            request.setAttribute("clist",clist);
//            String oid = request.getParameter("oid");
          User user = (User) request.getSession().getAttribute("user");
            int uid = user.getUid();
            List<Order> olist = orderService.findAllOrdersByUser(uid);
            request.setAttribute("olist",olist);
            return "/WEB-INF/user/orderlist.jsp";
        }
    }
}